{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Tutorial 104: Generate 21 ADME Predictors with 10 Lines of Code\n",
    "\n",
    "[Kexin](https://twitter.com/KexinHuang5)\n",
    "\n",
    "In the previous set of tutorials, hopefully, you are now familiarized with TDC. In this tutorial, we show through examples how to use TDC for fast ML model prototyping using DeepPurpose. Let's start introducing what is DeepPurpose.\n",
    "\n",
    "### DeepPurpose Overview\n",
    "DeepPurpose is a scikit learn style Deep Learning Based Molecular Modeling and Prediction Toolkit on Drug-Target Interaction Prediction, Compound Property Prediction, Protein-Protein Interaction Prediction, and Protein Function prediction. Using DeepPurpose, we can rapidly build model prototypes for various drug discovery tasks covered in TDC, such as ADME, Tox, HTS, Developability prediction, DTI, DDI, PPI, Antibody Affinity predictions. \n",
    "\n",
    "Note that DeepPurpose is developed by two of the core teams in TDC, Kexin and Tianfan, and it is now published in Bioinformatics. To start with this tutorial, please follow [DeepPurpose instructions](https://github.com/kexinhuang12345/DeepPurpose#install--usage) to set up the necessary packages. DeepPurpose also provides [tutorials](https://github.com/kexinhuang12345/DeepPurpose/blob/master/Tutorial_1_DTI_Prediction.ipynb) for you to familiarize with it. \n",
    "\n",
    "To install DeepPurpose, in your terminal, do the following:\n",
    "\n",
    "```bash\n",
    "conda create -n DeepPurpose python=3.6\n",
    "conda activate DeepPurpose\n",
    "conda install -c conda-forge rdkit\n",
    "pip install git+https://github.com/bp-kelley/descriptastorus \n",
    "pip install DeepPurpose\n",
    "pip install PyTDC --upgrade\n",
    "```\n",
    "\n",
    "And then open this jupyter notebook using this conda environment.\n",
    "\n",
    "We assume now you have set up the right environment. Now, we show you how to build an ADME predictor using Message Passing Neural Network (MPNN)! \n",
    "\n",
    "### Predicting HIA using MPNN with 10 Lines of Code\n",
    "\n",
    "First, let's load DeepPurpose and TDC:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from DeepPurpose import utils, CompoundPred\n",
    "from tdc.single_pred import ADME"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now, you can get the HIA dataset from TDC. HIA is from ADME task from Single-instance prediction and we want to predict whether or not can a compound be absorped in human intestinal, i.e. given SMILES X, predict 1/0. Note that for drug property prediction, DeepPurpose takes in an array of drug SMILES string and an array of labels. You could access that directly by setting the `get_data(format = 'dict')`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Downloading...\n",
      "100%|██████████| 48.1k/48.1k [00:00<00:00, 588kiB/s]\n",
      "Loading...\n",
      "Done!\n"
     ]
    }
   ],
   "source": [
    "data = ADME(name = 'HIA_Hou').get_data(format = 'dict')\n",
    "X, y = data['Drug'], data['Y']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "or for simplicity. We also provide a DeepPurpose format, where you can directly get the correct input data:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Found local copy...\n",
      "Loading...\n",
      "Done!\n"
     ]
    }
   ],
   "source": [
    "X, y = ADME(name = 'HIA_Hou').get_data(format = 'DeepPurpose')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "DeepPurpose provides 8 encoders for compound, ranging from MLP on classic cheminformatics fingerprint such as Morgan, RDKit2D to deep learning models such as CNN, transformer, and MPNN. To specify the encoder, simply types the encoder name. Here, we use MPNN as an example:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "drug_encoding = 'MPNN'"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now, we encode the data into the specified format, using `utils.data_process` function. It specifies train/validation/test split fractions, and random seed to ensure same data splits for reproducibility. **We have made DeepPurpose to accomodate the TDC benchmark split.** Simply type 'TDC' in the random seed will generate the same split as in TDC split function. The function outputs train, val, test pandas dataframes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Drug Property Prediction Mode...\n",
      "in total: 578 drugs\n",
      "encoding drug...\n",
      "unique drugs: 578\n",
      "Done.\n"
     ]
    }
   ],
   "source": [
    "train, val, test = utils.data_process(X_drug = X, \n",
    "                                      y = y, \n",
    "                                      drug_encoding = drug_encoding,\n",
    "                                      random_seed = 'TDC')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>SMILES</th>\n",
       "      <th>Label</th>\n",
       "      <th>drug_encoding</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>CC(=O)N/C1=C/C=CC=C1</td>\n",
       "      <td>1</td>\n",
       "      <td>[[[tensor(1.), tensor(0.), tensor(0.), tensor(...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>CC(=O)N/C1=N/N=C([S]1)[S](N)(=O)=O</td>\n",
       "      <td>1</td>\n",
       "      <td>[[[tensor(1.), tensor(0.), tensor(0.), tensor(...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                               SMILES  Label  \\\n",
       "0                CC(=O)N/C1=C/C=CC=C1      1   \n",
       "1  CC(=O)N/C1=N/N=C([S]1)[S](N)(=O)=O      1   \n",
       "\n",
       "                                       drug_encoding  \n",
       "0  [[[tensor(1.), tensor(0.), tensor(0.), tensor(...  \n",
       "1  [[[tensor(1.), tensor(0.), tensor(0.), tensor(...  "
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head(2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "After we have the dataset, you can set up the model configuration such as dimension, # of layers, optimization parameters and etc. As an example, we set the following configurations (we set train epochs to be 3 here for demonstration purpose):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "config = utils.generate_config(drug_encoding = drug_encoding, \n",
    "                         train_epoch = 3, \n",
    "                         LR = 0.001, \n",
    "                         batch_size = 128,\n",
    "                         mpnn_hidden_size = 32,\n",
    "                         mpnn_depth = 2\n",
    "                        )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now, you need to initialize the model. You can also load from pretrained model by `CompoundPred.model_pretrained(path_dir = PATH)`. Here, we initialize a new model:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = CompoundPred.model_initialize(**config)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "That's it. Now, you can train it!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Let's use CPU/s!\n",
      "--- Data Preparation ---\n",
      "--- Go for Training ---\n",
      "Training at Epoch 1 iteration 0 with loss 0.68003. Total time 0.0 hours\n",
      "Validation at Epoch 1 , AUROC: 0.63305 , AUPRC: 0.93538 , F1: 0.93577\n",
      "Training at Epoch 2 iteration 0 with loss 0.31937. Total time 0.00027 hours\n",
      "Validation at Epoch 2 , AUROC: 0.69467 , AUPRC: 0.94949 , F1: 0.93577\n",
      "Training at Epoch 3 iteration 0 with loss 0.37782. Total time 0.00027 hours\n",
      "Validation at Epoch 3 , AUROC: 0.71148 , AUPRC: 0.95229 , F1: 0.93577\n",
      "--- Go for Testing ---\n",
      "Testing AUROC: 0.7716171617161716 , AUPRC: 0.9609550419886628 , F1: 0.9308755760368664\n",
      "--- Training Finished ---\n"
     ]
    },
    {
     "data": {
      "image/png": "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k3zzzTeMGzeOTz75hPj4eG666Saee+45ALp168aePXuIi4vjkUceoV+/fj4dq/R8/vnn9OjRg8jISKpXr07NmjVZtWoVzZo1S3efvvnmG6ZPn37espTjm6Jbt24MHz6c22+//YJi9IWdcaTx998nueuuz7j++vfZvPkQ48evCHZIxuQZPXr0YNasWcTFxbFhwwauvvpqr+W2b9/O9u3bqVmzJgAhISE8/vjjvPjii17L33rrraxbt45t29LvumfNmjXUr3+2h4Y6deqwfPlyfv75Z0aOHMkTTzyRumzFihW89957fPPNN3z55Zds3bqVVatWsX79etauXcvy5csBePfdd1m7di1r1qxh4sSJHD58+LztDho0KLX6yPMxZsyY88ru3buXSy65JHW6cuXK7N27N919mjNnDm3atKF48eLnzD916hSLFi06pwqvfv36rF69Ot115SQ743AlJyvvvLOOoUO/4ujROCIjQ3nqqRYMGXJNsEMzJkt8OTPwl4YNG7Jz504++ugjOnbseN7yjz/+mO+//57IyEimTZtG6dKlU5f16tWLUaNGsWPHjvNeFxoaypAhQxg9ejQdOnTwuu19+/ZRrly51OmYmBjuuusutm7dioiQkJCQuuzGG29M3faXX37Jl19+yRVXXAHAiRMn2Lp1Ky1atGDixInMmTMHgD179rB161bKlClzznYnTJjg6+FBVc+bl9FVTx999JHXNpsvvviC5s2bn3P8QkNDiYiIIDY2lmLFivkcU3ZY4gB27DjKHXfM4ccf9wDQtm0NJk/uSM2apTN5pTEmrS5duvDYY4+xbNmy836h33bbbUyaNMnr68LCwnj00Ud56aWXvC7v3bs3o0eP5rLLLvO6vFChQufcrzBixAhat27NnDlz2LlzJ61atUpdVqRIkdTnqsrw4cO57777zlnfsmXL+Oqrr1ixYgWFCxemVatWXu+HGDRoEEuXLj1vfo8ePRg2bNg58ypXrsyePXtSp6Ojo7n44ou97s/hw4dZtWpVauLyNGvWrHOqqVLEx8cTFRXldX05yRIHULx4JH/8cZiLLirKq6+249ZbL7Nr4o3JpnvuuYcSJUrQoEEDli1blqXX9unTh7FjxxIbG3vesvDwcAYNGsSYMWO4/vrrz1tet25dXnnlldTpmJiY1Mb5GTNmpLvNdu3aMWLECG6//XaKFi3K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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYwAAAEaCAYAAAACBmAUAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3deXwV1f3/8dcngbCEsCasAYKyI7hAUWoVVECwFdefRat1q/Zba7VU7FfbulSr1Gqr5atdXChaq2hpbVGsggKiVhSQRdkjawDZCWvI9vn9MZN4CQHuheTeLO/n43EfzJ05M/M5Sbife+bMnGPujoiIyNEkJToAERGpHpQwREQkKkoYIiISFSUMERGJihKGiIhERQlDRESiooQhNZKZLTKzQUcp08HM9phZcpzCqlRmdp2ZfRDx3s2scyJjkppFCUPiysxWm9n+8IN6k5n9xcwaVfR53L2Xu884Spm17t7I3Ysq+vzhh/XesJ7rzex3VS0xmdn5ZjbTzHab2RYze8/MRiQ6Lqm6lDAkES5090bAacDXgF+ULWCB6v73eXJYz4HAt4EbEhxPKTO7HPg78AKQCbQC7gUuPIZj1YTflURBv2RJGHdfD/wHOAnAzGaY2UNm9iGwDzjBzJqY2XNmtjH8pv6ryG/qZnaTmS0JvyUvNrPTwvWrzWxwuNzfzOaY2a6wVfO7cH1W2BKoE75va2aTzGy7mWWb2U0R57nfzF41sxfCcy0ys35R1jMb+BA4JeJ4x1qvu8zsi4j1l8T6czczA34HPOjuz7p7rrsXu/t77n5TRH1fjNin7M+q7O/qZ2Y2p8x5RpnZpHC5npk9ZmZrw9/Bn8ysQayxS2IpYUjCmFl74AJgXsTqa4CbgTRgDfA8UAh0Bk4FhgLfC/f/f8D9wHeBxsAIYFs5p/o98Ht3bwycCLx6mJBeBnKAtsDlwMNmdl7E9hHABKApMAl4Msp6dgfOArIjVh9rvb4Ij9UE+CXwopm1iSaOCN2A9sDEGPcrK/J39X9ANzPrErH9KuClcPkRoCtB0uwMtCNo0Uh14u566RW3F7Aa2APsJEgIfwAahNtmAA9ElG0FHCjZHq67EpgeLr8N3H6E8wwOl2cSfLimlymTBThQh+ADtAhIi9g+BhgfLt8PvBOxrSew/wj1dGAXsDdcfhmod7z1Kuc884GLwuXrgA/KxNC5nH3ODLfVP8Jx7wdeLO9nVd7vKlz3InBvuNwF2A00BCz8OZwYUXYAsCrRf496xfZSC0MS4WJ3b+ruHd39FnffH7FtXcRyR6AusNHMdprZTuDPQMtwe3uCb9xHcyPBt9ulZjbbzL5VTpm2wHZ33x2xbg3BN+ESX0Ys7wPql1yiOYzTgEYE/RenA6nHWy8z+66ZzY/Y7yQg/QgxlKektRJry6SsdWXev0SQ+CBoXfzL3fcBGQSJY25E3G+F66UaUcKQqiZy+OR1BN/E08ME09TdG7t7r4jtJx71gO4r3P1Kgg/kR4CJZpZaptgGoLmZpUWs6wCsP9aKhOd2d38V+IivLsEcU73MrCPwDHAr0MLdmwKfE3yDj8Wy8ByXHaHMXoIP+RKtyylTdqjrKUC6mZ1CkDhKLkdtBfYDvSLq28SDGwKkGlHCkCrL3TcSfAj91swam1mSmZ1oZgPDIs8Co82sb3inTufwQ/UgZna1mWW4ezHBpTAILj9Fnmsd8F9gjJnVN7M+BC2Tv1VQdX4N3GxmrY+jXqkEH9JbwnpdT3jDQCzc3YGfAPeY2fURMXzDzJ4Oi80HzrbgWZUmwN1RHLeQoF/kUaA5MDVcX0yQ6B43s5Zh7O3M7PxYY5fEUsKQqu67QAqwGNhB8IHUBsDd/w48RPBNdjfwL4IPqrKGAYvMbA9BB/hId88rp9yVBNfqNwCvAfe5+9SKqIS7fwa8B9x5rPVy98XAbwlaK5uA3gR3Xx1LPBP56lbfDeHxfgX8O9w+FXgFWAjMBd6I8tAvAYOBv4cJpMT/EnT6zzKzXcA7BJ3vUo1Y8GVDRETkyNTCEBGRqChhiIhIVJQwREQkKkoYIiISlSM9dFStpaene1ZWVqLDEBGpVubOnbvV3ct9qLLGJoysrCzmzJlz9IIiIlLKzNYcbpsuSYmISFSUMEREJCpKGCIiEpUa24chIlBQUEBOTg55eeWNhCK1Wf369cnMzKRu3bpR76OEIVKD5eTkkJaWRlZWFsFEeyLBPEjbtm0jJyeHTp06Rb1f3C5Jmdk4M9tsZp8fZruZ2dhwasyFJVNShtuuNbMV4evaeMUsUt3l5eXRokULJQs5iJnRokWLmFue8ezDGE8waujhDCeYpasLwbSPfwQws+bAfQQT0PQH7jOzZpUaqUgNomQh5TmWv4u4XZJy95lmlnWEIhcBL4Rj9c8ys6bhXMWDgKnuvh3AzKYSJJ6XKyPO/36xlSemrqiMQ0sCdEpPZcylvUlK0oemyPGqSn0Y7Th4yseccN3h1h/CzG4maJ3QoUOHYwpix94CPlm9/Zj2larnk9XbufGsTnRtlXb0wiJyRFUpYZT3FdCPsP7Qle5PA08D9OvX75gm+jjjhOa8cvMZx7KrVDGjJy5g3fb9FBVrzpdEMjOuvvpq/vrXvwJQWFhImzZtOP3003njjTcYP348d955J+3atSM/P59Ro0Zx0003MX78eG644Qbmz59Pnz59ADjppJN44403yMrKIisri759+/KPf/wDgIkTJ5Yer6x58+bx1FNP8eyzz8at3rEaM2YMzz33HMnJyYwdO5bzzz90QsJp06YxevRo8vPz6du3L8899xx16gQf4zNmzODHP/4xBQUFpKen895775Gfn8/gwYOZNm1aabnjUZUSRg7QPuJ9JsFMYDkEl6Ui18+orCBaNKpHi0b1KuvwEkepKVXpz7v2Sk1N5fPPP2f//v00aNCAqVOn0q7dwRcJvv3tb/Pkk0+yefNmevXqxYgRIwDIzMzkoYce4pVXXin32HPmzGHRokX06tWr3O0lHn74YX7xi19EHXNhYWGFfMBGa/HixUyYMIFFixaxYcMGBg8ezPLly0lOTi4tU1xczLXXXsu7775L165duffee3n++ee58cYb2blzJ7fccgtvvfUWHTp0YPPmzQCkpKRw3nnn8corr/Cd73znuOOsSv+jJgG3mtkEgg7uXHffaGZvAw9HdHQPJYr5hUXkYFl3Ta6U467+9TePWmb48OFMnjyZyy+/nJdffpkrr7yS999//5ByLVu25MQTT2TNmmA4o29961vMnDmTZcuW0a3boTO6jh49mocffpi//e3wU6/v3r2bhQsXcvLJJwPwySef8OMf/7g0gf3lL3+hW7dujB8/nsmTJ5OXl8fevXuZNm0ajz76KK+++ioHDhzgkksu4Ze//CUAF198MevWrSMvL4/bb7+dm2++Oaqf1eH8+9//ZuTIkdSrV49OnTrRuXNnPvnkEwYMGFBaZtu2bdSrV4+uXbsCMGTIEMaMGcONN97ISy+9xKWXXlp6Kb5ly5al+1188cXcfffdFZIw4nlb7csEcxF3M7McM7vRzP7HzP4nLPImsJJg3t9ngFsAws7uB4HZ4euBkg5wEakeRo4cyYQJE8jLy2PhwoWcfvrp5ZZbuXIlK1eupHPnzgAkJSXx05/+lIcffrjc8ldccQWffvop2dnZhz33nDlzOOmkk0rfd+/enZkzZzJv3jweeOABfvazn5Vu++ijj3j++eeZNm0aU6ZMYcWKFXzyySfMnz+fuXPnMnPmTADGjRvH3LlzmTNnDmPHjmXbtm2HnHfUqFGccsoph7x+/etfH1J2/fr1tG//1QWWzMxM1q9ff1CZ9PR0CgoKSgdVnThxIuvWBd27y5cvZ8eOHQwaNIi+ffvywgsvlO530kknMXv27MP+fGIRz7ukrjzKdgd+eJht44BxlRGXSG0RTUugsvTp04fVq1fz8ssvc8EFFxyy/ZVXXuGDDz6gXr16/PnPf6Z58+al26666ioeeughVq1adch+ycnJ3HnnnYwZM4bhw4eXe+6NGzeSkfHVaN25ublce+21rFixAjOjoKCgdNuQIUNKzz1lyhSmTJnCqaeeCsCePXtYsWIFZ599NmPHjuW1114DYN26daxYsYIWLVocdN7HH3882h8Pwcffwcre9mpmTJgwgVGjRnHgwAGGDh1aetmssLCQuXPn8u6777J//34GDBjAGWecQdeuXUlOTiYlJYXdu3eTlnZ8N39UpUtSIlKDjRgxgtGjRzNjxoxDvpGX9GGUp06dOtxxxx088sgj5W6/5pprGDNmzGH7MRo0aHDQA2r33HMP55xzDq+99hqrV69m0KBBpdtSU1NLl92du+++m+9///sHHW/GjBm88847fPTRRzRs2JBBgwaV+wDcqFGjmD59+iHrR44cyV133XXQuszMzNLWAgRP6Ldt2/aQfQcMGFB6KW/KlCksX768dP/09HRSU1NJTU3l7LPPZsGCBaWXrw4cOED9+vXL/fnEQoMPikhc3HDDDdx777307t075n2vu+463nnnHbZs2XLItrp16zJq1CieeOKJcvft0aPHQZescnNzSzvdy7ujqsT555/PuHHj2LNnDxBcNtq8eTO5ubk0a9aMhg0bsnTpUmbNmlXu/o8//jjz588/5FU2WUCQTCdMmMCBAwdYtWoVK1asoH///oeUK+nMPnDgAI888gj/8z/BFf2LLrqI999/n8LCQvbt28fHH39Mjx49gKDvIyMjI6Yxow5HCUNE4iIzM5Pbb7/9mPZNSUnhtttuK/3A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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Training\n",
    "model.train(train, val, test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In less than 1 minute with a CPU, you can already get pretty good performance! Now, you can save the model by typing:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "model.save_model('./tutorial_model')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You may already notice that the whole thing can be streamlined for all the ADME tasks in TDC by simply specifying different dataset names. To generate a full set of ADME predictors, you can do:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from tdc.utils import retrieve_dataset_names\n",
    "adme_datasets = retrieve_dataset_names('ADME')\n",
    "\n",
    "for dataset_name in adme_datasets:\n",
    "    X, y = ADME(name = dataset_name).get_data(format = 'DeepPurpose')\n",
    "    drug_encoding = 'MPNN'\n",
    "    train, val, test = utils.data_process(X_drug = X, \n",
    "                                      y = y, \n",
    "                                      drug_encoding = drug_encoding,\n",
    "                                      random_seed = 'TDC')\n",
    "    config = utils.generate_config(drug_encoding = drug_encoding, \n",
    "                         train_epoch = 5, \n",
    "                         LR = 0.001, \n",
    "                         batch_size = 128,\n",
    "                         mpnn_hidden_size = 32,\n",
    "                         mpnn_depth = 2\n",
    "                        )\n",
    "    model = CompoundPred.model_initialize(**config)\n",
    "    model.train(train, val, test)\n",
    "    model.save_model('./' + dataset_name + '_model')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We have tested the above code and it would print out all the training process. We omit the output here since it is a bit long. But hopefully, you could get the gist of it. DeepPurpose also allows to do similar modeling for DTI, DDI, PPI and protein function prediction! Checkout the [repository](https://github.com/kexinhuang12345/DeepPurpose)!\n",
    "\n",
    "That's it for this tutorial!"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:DeepPurpose]",
   "language": "python",
   "name": "conda-env-DeepPurpose-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
